<?php

namespace Ycr\Pack\redis;

/**
 * 分页缓存类
 * Class RedisPageCache
 * @package Ycr\Pack\redis
 * @author ycr <Email: yuncran@126.com>
 */
class RedisPageCache extends BaseRedisConnect
{

    /*
     * 添加记录
     * @param $id id
     * @param $data hash数据
     * @param $hashName Hash 记录名称
     * @param $SortName Redis SortSet 记录名称
     * @param $redis Redis 对象
     * @return bool
     */
    public function set_redis_page_info($id, $data)
    {
        if (!is_numeric($id) || !is_array($data)) return false;
        $hashName = $this->_hash_prefix . '_' . $id;
        $this->_redis->hMset($hashName, $data);
        $this->_redis->zAdd($this->_hash_prefix . '_sort', $id, $id);
        return true;
    }


    /*
     * 获取分页数据
     * @param $page 当前页数
     * @param $pageSize 每页多少条
     * @param $hashName Hash 记录名称
     * @param $SortName Redis SortSet 记录名称
     * @param $redis Redis 对象
     * @param $key 字段数组 不传为取出全部字段
     * @return array
     */
    public function get_redis_page_list($page, $pageSize, $key = array())
    {
        if (!is_numeric($page) || !is_numeric($pageSize)) return false;
        $limit_s = ($page - 1) * $pageSize;
        $limit_e = ($limit_s + $pageSize) - 1;
        $range = $this->_redis->zRange($this->_hash_prefix . '_sort', $limit_s, $limit_e); //指定区间内，带有 score 值(可选)的有序集成员的列表。
        $count = $this->_redis->zCard($this->_hash_prefix . '_sort'); //统计ScoreSet总数
        $pageCount = ceil($count / $pageSize); //总共多少页
        $pageList = array();
        foreach ($range as $qid) {
            if (count($key) > 0) {
                $pageList[] = $this->_redis->hMGet($this->_hash_prefix . '_' . $qid, $key); //获取hash表中所有的数据
            } else {
                $pageList[] = $this->_redis->hGetAll($this->_hash_prefix . '_' . $qid); //获取hash表中所有的数据
            }
        }

        $data = array(
            'data' => $pageList, //需求数据
            'page' => array(
                'page' => $page, //当前页数
                'pageSize' => $pageSize, //每页多少条
                'count' => $count, //记录总数
                'pageCount' => $pageCount //总页数
            )
        );
        return $data;
    }


    /*
     * 删除记录
     * @param $id id
     * @param $hashName Hash 记录名称
     * @param $SortName Redis SortSet 记录名称
     * @param $redis Redis 对象
     * @return bool
     */
    public function del_redis_page_info($id)
    {
        if (!is_array($id)) return false;
        foreach ($id as $value) {
            $hashName = $this->_hash_prefix . '_' . $value;
            $this->_redis->del($hashName);
            $this->_redis->zRem($this->_hash_prefix . '_sort', $value);
        }
        return true;
    }
}